package com.nd.rj.common.thirdPlatformAuth.operateImpl;

import android.app.Activity;
import android.app.Dialog;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.widget.Toast;

import com.nd.rj.common.ILogin99Listener;
import com.nd.rj.common.R;
import com.nd.rj.common.thirdPlatformAuth.IOperate.IThirdPlatformAuthBase;
import com.product.android.business.bean.UserInfo;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WeiboAuth;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.auth.sso.SsoHandler;
import com.sina.weibo.sdk.exception.WeiboException;

/**
 * 新浪微博登录认证
 * 
 * <br>Created 2014-11-5 下午5:09:59
 * @version  
 * @author   linsj		
 *
 * @see 	 
 * 
 * Copyright(c) 2009-2014, TQ Digital Entertainment, All Rights Reserved
 *
 */
public class SinaWeiboLoginAuth implements IThirdPlatformAuthBase{
    /** TAG */
    private static final String TAG = SinaWeiboLoginAuth.class.getSimpleName();
    
    private UserInfo mUser;
    
    /**登录结果监听*/
    private ILogin99Listener mLogin99Listener;
    
    /**处理时的等待对话框*/
    private Dialog mWaitDlg;
    
    /** 微博 Web 授权接口类，提供登陆等功能  */
    private WeiboAuth mWeiboAuth;
    
    /** 获取到的 Code */
    private String mCode;
    
    /** 获取到的 Token */
    private Oauth2AccessToken mAccessToken;
    
    /** 注意：SsoHandler 仅当 SDK 支持 SSO 时有效 */
    private SsoHandler mSsoHandler;
    
    /**页面*/
    private Activity mActivity;
    
    /**
     * 构造方法
     * Creates a new instance of NdLogin99PlatformImpl.
     * <br>Created 2014-9-22 下午9:13:48
     * @param context   上下文
     * @param bInit     是否要初始化
     */
    public SinaWeiboLoginAuth(Activity activity){
        mActivity = activity;
        
        // 初始化微博对象
        mWeiboAuth = new WeiboAuth(mActivity, "", "", "");
    }

    @Override
    public void doAuth() {
        mSsoHandler = new SsoHandler(mActivity, mWeiboAuth);
        mSsoHandler.authorize(new AuthListener());
    }

    @Override
    public void getUserInfo() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void doLogout() {
        // TODO Auto-generated method stub        
    }
    
    /**
     * 微博认证授权回调类。
     * 1. SSO 授权时，需要在 {@link #onActivityResult} 中调用 {@link SsoHandler#authorizeCallBack} 后，
     *    该回调才会被执行。
     * 2. 非 SSO 授权时，当授权结束后，该回调就会被执行。
     * 当授权成功后，请保存该 access_token、expires_in、uid 等信息到 SharedPreferences 中。
     */
    class AuthListener implements WeiboAuthListener {
        
        @Override
        public void onComplete(Bundle values) {
            // 从 Bundle 中解析 Token
            mAccessToken = Oauth2AccessToken.parseAccessToken(values);
            if (mAccessToken.isSessionValid()) {
            } else {
                // 以下几种情况，您会收到 Code：
                // 1. 当您未在平台上注册的应用程序的包名与签名时；
                // 2. 当您注册的应用程序包名与签名不正确时；
                // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
                if (null != mActivity) {
                    String message = mActivity.getString(R.string.sina_weibo_auth_failed);
                    // String code = values.getString("code");
                    // if (!TextUtils.isEmpty(code)) {
                    // message = message + "\n授权错误码：" + code;
                    // }
                    Toast.makeText(mActivity, message, Toast.LENGTH_LONG).show();
                }
            }
        }

        @Override
        public void onCancel() {
        }

        @Override
        public void onWeiboException(WeiboException e) {
            if(null != mActivity){
                // 只要activity不是null，都应该显示消息，即使已经finish
                StringBuilder sb = new StringBuilder();
                sb.append(mActivity.getString(R.string.sina_weibo_auth_exception)).append("：")
                        .append(e.getMessage());
                Toast.makeText(mActivity, sb.toString(), Toast.LENGTH_LONG).show();
            }
        }
    }
    
    /**
     * 获取第三方应用信息
     * 
     * <br>Created 2014-11-6 下午5:28:36
     * @param strKey    配置在AndroidManifest.xml里的Key名
     * @return          对应的值
     * @author       linsj
     */
    private String getThirdPlatformInfo(final String strKey) {
        ApplicationInfo appInfo;
        try {
            appInfo = mActivity.getPackageManager().getApplicationInfo(mActivity.getPackageName(),
                    PackageManager.GET_META_DATA);
            Bundle bundle = appInfo.metaData;
            Object object = bundle.get(strKey);

            if (object != null && object instanceof String) {
                return (String) object;
            }

        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }

        return "";
    }
}
